let arrs = [
  { id: 1, next: [2, 3] },
  { id: 2, next: [4] },
  { id: 3, next: [4, 5] },
  { id: 4, next: [] },
  { id: 5, next: [] },
  { id: 6, next: [7, 8] },
  { id: 7, next: [9] },
  { id: 8, next: [] },
  { id: 9, next: [] }
]

// 场景：根据 id 删除对应元素即其 next 中元素，以及 next 元素中的 next 元素，直至有关元素全部删除
/**
 * 方式一：先拿到子元素，后删除当前元素
 * 1.传入的当前元素 id
 * 2.拿到传入元素的 next，并得到 next对应的对象数组
 * 3.遍历 next 对象数组，如果遍历对象item的next.length === 0 ，从 arrs 中删除当前元素；否则 重复 2,3,4的步骤，即递归
 * 4.从 arrs 中删除传入的当前元素
 */

// 根据 id 从 数组中删除元素
function del (id) {
  arrs.splice(arrs.findIndex(ele => ele.id === id), 1)
}

// 根据 id 得到数组中对应的对象的 next
function getIdObj(id) {
  let curNode = arrs.filter(item => item.id === id)[0].next
  del(id)
  return curNode
}

// 将 next 中的 ids 转换为 对象数组
function getObjArr (ids) {
  // let temp = []
  // ids.forEach(item => {
  //   arrs.forEach(ele => {
  //     if (item === ele.id) {
  //       temp.push(ele)
  //     }
  //   })
  // })
  return arrs.filter(item => ids.includes(item.id))
}

// 递归
function recursion(nodes) {
  nodes.forEach(item => {
    if (item.next.length === 0) {
      del(item.id)
    } else {
      recursion(getObjArr(item.next))
      del(item.id)
    }
  })
}
recursion(getObjArr(getIdObj(5)))
console.log(arrs)
